\section{Gestion de crash de serveurs}

En deuxi\`eme partie du projet, nous devions g\'erer le crash d'un serveur, et donc la redirection du client.  Pour se faire, nous avons commenc\'e par simuler la cr\'eation de 5 serveurs au lieu d'un au lancement. En effet, lorsque vous lancez le serveur sur le port 5000, 4 autres serveurs sont cr\'e\'es, sur les ports 5001 \`a 5004.
Vous pouvez tester ceci en lançant un client sur le port 5002 par exemple :\newline
\begin{center}
\includegraphics[width=0.5\linewidth]{mainTexpictures/client_port5002.jpg}
\end{center}
Ensuite nous avons fait le choix de traiter chaque serveur de la même mani\`ere, sans serveur central. Ainsi lorsqu'un utilisateur envoie un message, celui-ci passe par le canal pour remonter au serveur. Comme chaque serveur poss\`ede une liste de tous les serveurs (où il se trouve \'egalement), le serveur transmet ce message \`a tous les serveurs (dont lui-même) pour le diffuser. Il en va de même lors de l'arriv\'ee d'un client, ou la cr\'eation d'un canal.
Cette liste de serveur est donc cr\'e\'ee \`a la cr\'eation du premier serveur. Lors de la connexion du client au serveur, celui-ci reçoit \'egalement une liste d'IP et de port correspondant \`a tous les serveurs. Ainsi lorsque le serveur « crash » (ceci sera d\'etaill\'e par la suite), il essaye de se connecter au serveur suivant (ici le serveur ayant le port du client +1, ou 5000 s'il \'etait sur le port 5004). Ainsi, le client ne perçoit même pas le crash du serveur et continue de discuter comme si de rien n'\'etait.

\subsection{Simulation de crash du serveur}
Pour pouvoir simuler un crash du serveur, nous avons choisis de mettre le canal par lequel le client communique \`a null lorsque le client envoie « kill server ». Ainsi le client ne peut envoyer le message, et est donc redirig\'e sur un autre serveur :\newline
\begin{center}
\includegraphics[width=0.5\linewidth]{mainTexpictures/kill_server.jpg}
\end{center}
Utilisation du chat avec crash serveur : 
\begin{itemize}
\item{Cr\'eez un serveur sur le port 5000.}
\item{Cr\'eez un premier client sur le port 5000.}
\item{Cr\'eez un deuxi\`eme client sur le port 5002.}
\end{itemize}
Ces deux clients peuvent communiquer sans soucis :
\begin{center}
\includegraphics[width=0.5\linewidth]{mainTexpictures/deux_clients_port_different.jpg}
\end{center}
Lorsqu'un client communique, le port sur lequel est connecté le client est affiché dans la console.
Ainsi lorsque l'on \'ecrit « kill server », puis un autre message, le port du client a chang\'e :
\begin{center}
\includegraphics[width=0.2\linewidth]{mainTexpictures/chgt_canal.jpg}
\end{center}

